//客户端代码，用于写入数据
#include "Comm.hpp"
#include "Fifo.hpp"
#include <unistd.h>

int main()
{
    //十六位进制的方式获取key
    key_t key = GetShmKeyOrDie();
    cout << "key: " << ToHex(key) << endl;

    //获取共享内存标识符
    int shmid = GetShm(key, defaultsize);
    cout << "shmid: " << shmid << endl;

    //将当前程序的进程与共享内存挂接
    char *addr = (char *)ShmAttach(shmid);
    cout << "Attach shm success, addr: " << ToHex((uint64_t)addr) << endl;

    //先将共享内存清空（将共享内存的前defaultsize个字节全部设置为0）
    memset(addr, 0, defaultsize);
    //然后以写的方式打开管道文件
    Sync syn;
    syn.OpenWriteOrDie();

    //客户端通信，开始往共享内存中写入数据
    for (char c = 'A'; c <= 'Z'; c++) // pipe, fifo, ->read/write->系统调用， shm -> 没有使用系统调用！！
    {
        addr[c - 'A'] = c;
        sleep(1);
        syn.Wakeup();
    }

    //将共享内存与进程分离
    ShmDetach(addr);
    cout << "Detach shm success, addr: " << ToHex((uint64_t)addr) << endl;
    sleep(5);

    return 0;
}